home *** CD-ROM | disk | FTP | other *** search
/ Aminet 23 / Aminet 23 (1998)(GTI - Schatztruhe)[!][Feb 1998].iso / Aminet / misc / emu / amiSPIMsrc.lha / Tests / tt.alu.bare.s < prev    next >
Text File  |  1994-01-19  |  30KB  |  1,844 lines

  1. # SPIM S20 MIPS simulator.
  2. # A torture test for the ALU instructions in the bare SPIM simulator.
  3. # Copyright (C) 1990-1994 James Larus, larus@cs.wisc.edu.
  4. # ALL RIGHTS RESERVED.
  5. #
  6. # SPIM is distributed under the following conditions:
  7. #
  8. # You may make copies of SPIM for your own use and modify those copies.
  9. #
  10. # All copies of SPIM must retain my name and copyright notice.
  11. #
  12. # You may not sell SPIM or distributed SPIM in conjunction with a commerical
  13. # product or service without the expressed written consent of James Larus.
  14. #
  15. # THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  16. # IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  17. # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  18. # PURPOSE.
  19. #
  20.  
  21. # $Header: /home/primost/larus/Software/SPIM/Tests/RCS/tt.alu.bare.s,v 1.5 1994/01/19 21:30:43 larus Exp larus $
  22.  
  23. # Adapted by Anne Rogers <amr@blueline.Princeton.EDU> from tt.le.s.
  24. # Run -bare -notrap.
  25.  
  26. # IMPORTANT!!!
  27. # This file only works on little-endian machines.
  28. #
  29.  
  30. # Test ALU instructions.
  31.  
  32. # WARNING: This code is not relocatable.  DO NOT add instructions without
  33. # changing test code for JAL, JALR, BGEZAL, BLTZAL.  Add new "data" statements
  34. # only at after "Passed all tests\n".
  35.  
  36.  
  37.     .data
  38. saved_ret_pc:    .word 0        # Holds PC to return from main
  39. sm:      .asciiz "Failed  "   
  40.     .text
  41. # Standard startup code.  Invoke the routine main with no arguments.
  42.     .globl __start
  43. __start: jal main
  44.     addu $0 $0 $0        # Nop
  45.     addiu $2 $0 10
  46.     syscall            # syscall 10 (exit)
  47.     addu $0 $0 $0        # Nop
  48.     addu $0 $0 $0        # Nop
  49.     addu $0 $0 $0        # Nop
  50.     addu $0 $0 $0        # Nop
  51.  
  52.     .globl main
  53. main:
  54.     lui $4 0x1000
  55.     sw $31 0($4)
  56.  
  57. #
  58. # Try modifying R0
  59. #
  60.     addi $0 $0 1
  61.  
  62. #
  63. # Now, test each instruction
  64. #
  65.  
  66.     .data
  67. add_:    .asciiz "Testing ADD\n"
  68.     .text
  69.     addi $2 $0 4    # syscall 4 (print_str)
  70. #    la $a0 add_
  71.     lui $a0, 0x1000
  72.     ori $a0 $a0 0xd
  73.     syscall
  74.  
  75.     addi $2 $0 1
  76.     addi $3 $0 -1
  77.  
  78.     add $4 $0 $0
  79.     bne $4 $0 fail
  80.     addu $0 $0 $0        # Nop
  81.     add $4 $0 $2
  82.     bne $4 $2 fail
  83.     addu $0 $0 $0        # Nop
  84.     add $4 $4 $3
  85.     bne $4 $0 fail
  86.     addu $0 $0 $0        # Nop
  87.  
  88.     .data
  89. addi_:    .asciiz "Testing ADDI\n"
  90.     .text
  91.     addi $2 $0 4    # syscall 4 (print_str)
  92. #    la $a0 addi_
  93.     lui $a0, 0x1000
  94.     ori $a0 $a0 0x1a          
  95.     syscall
  96.  
  97.     addi $2 $0 1
  98.  
  99.     addi $4 $0 0
  100.     bne $4 $0 fail
  101.     addu $0 $0 $0        # Nop
  102.     addi $4 $0 1
  103.     bne $4 $2 fail
  104.     addu $0 $0 $0        # Nop
  105.     addi $4 $4 -1
  106.     bne $4 $0 fail
  107.  
  108.  
  109.     .data
  110. addiu_:    .asciiz "Testing ADDIU\n"
  111.     .text
  112.     addi $2 $0 4    # syscall 4 (print_str)
  113. #    la $a0 addiu_
  114.     lui $a0, 0x1000
  115.     ori $a0 $a0 0x28
  116.     syscall
  117.  
  118.     addi $2 $0 1
  119.     addiu $4 $0 0
  120.     bne $4 $0 fail
  121.     addu $0 $0 $0        # Nop
  122.     addiu $4 $0 1
  123.     bne $4 $2 fail
  124.     addu $0 $0 $0        # Nop
  125.     addiu $4 $4 -1
  126.     bne $4 $0 fail
  127.     addu $0 $0 $0        # Nop
  128.  
  129.     lui $2 0x3fff
  130.     ori $2 $2 0xffff
  131.     addiu $2 $2 101
  132.  
  133.  
  134.     .data
  135. addu_:    .asciiz "Testing ADDU\n"
  136.     .text
  137.     addi $2 $0 4    # syscall 4 (print_str)
  138. #    la $a0 addu_
  139.     lui $a0, 0x1000
  140.     ori $a0 $a0 0x37
  141.     syscall
  142.  
  143.     addi $2 $0 1
  144.     addi $3 $0 -1
  145.  
  146.     addu $4 $0 $0
  147.     bne $4 $0 fail
  148.     addu $0 $0 $0        # Nop
  149.     addu $4 $0 $2
  150.     bne $4 $2  fail
  151.     addu $0 $0 $0        # Nop
  152.     addu $4 $4 $3
  153.     bne $4 $0 fail
  154.     addu $0 $0 $0        # Nop
  155.  
  156.     
  157.     lui $2 0x3fff
  158.     ori $2 $2 0xffff
  159.     addu $2 $2 $2
  160.  
  161.  
  162.     .data
  163. and_:    .asciiz "Testing AND\n"
  164.     .text
  165.     addi $2 $0 4    # syscall 4 (print_str)
  166. #    la $a0 and_
  167.     lui $a0, 0x1000
  168.     ori $a0 $a0 0x37
  169.     syscall
  170.  
  171.     addi $2 $0 1
  172.     addi $3 $0 -1
  173.  
  174.     and $4 $0 $0
  175.     bne $4 $0 fail
  176.     addu $0 $0 $0        # Nop
  177.     and $4 $2 $2
  178.     beq $4 $0 fail
  179.     addu $0 $0 $0        # Nop
  180.     and $4 $2 $3
  181.     bne $4 $2 fail
  182.  
  183.  
  184.     .data
  185. andi_:    .asciiz "Testing ANDI\n"
  186.     .text
  187.     addi $2 $0 4    # syscall 4 (print_str)
  188. #    la $a0 andi_
  189.     lui $a0, 0x1000
  190.     ori $a0 $a0 0x52
  191.     syscall
  192.  
  193.     addi $2 $0 1
  194.     addi $3 $0 -1
  195.     addi $5 $0 -1
  196.  
  197.     andi $4 $0 0
  198.     bne $4 $0 fail
  199.     addu $0 $0 $0        # Nop
  200.     and $4 $2 1
  201.     beq $4 $0 fail
  202.     addu $0 $0 $0        # Nop
  203.     and $4 $2 $5
  204.     bne $4 $2 fail
  205.     addu $0 $0 $0        # Nop
  206.     and $4 $3 $5
  207.     bne $4 $3 fail
  208.     addu $0 $0 $0        # Nop
  209.  
  210.  
  211.     .data
  212. beq_:    .asciiz "Testing BEQ\n"
  213.     .text
  214.     add $v0 $0 4    # syscall 4 (print_str)
  215. #    la $a0 beq_               
  216.     lui $a0, 0x1000
  217.     ori $a0 $a0 0x60
  218.     syscall
  219.  
  220.     add $2 $0 -1
  221.     add $3 $0 1
  222.  
  223.     beq $0 $0 l1
  224. #    j fail
  225.        addu $0 $0 $0        # Nop        
  226. l1:    beq $2 $2 l2
  227. #    j fail
  228.        addu $0 $0 $0        # Nop    
  229. l2:    beq $3 $2 fail
  230.        addu $0 $0 $0        # Nop    
  231.  
  232.     addi $2 $0 3
  233. l2_1:    sub $2 $2 $3
  234.     bne $2 $0 l2_1
  235.     addu $0 $0 $0        # Nop
  236.  
  237.  
  238.     .data
  239. bgez_:    .asciiz "Testing BGEZ\n"
  240.     .text
  241.     addi $v0 $0 4    # syscall 4 (print_str)
  242. #    la $a0 bgez_
  243.     lui $a0, 0x1000
  244.     ori $a0 $a0 0x6d
  245.         
  246.     syscall
  247.  
  248.     addi $2 $0 -1
  249.     addi $3 $0 1
  250.  
  251.     bgez $0 l3
  252.     addu $0 $0 $0           # Nop
  253.     j fail
  254. l3:    bgez $3 l4
  255.     addu $0 $0 $0           # Nop
  256.     j fail
  257. l4:    bgez $2 fail
  258.     addu $0 $0 $0           # Nop
  259.  
  260.     .data
  261. bgtz_:    .asciiz "Testing BGTZ\n"
  262.     .text
  263.     addi $v0 $0 4    # syscall 4 (print_str)
  264. #    la $a0 bgtz_
  265.     lui $a0, 0x1000
  266.     ori $a0 $a0 0x7b
  267.     syscall
  268.  
  269.     addi $2 $0 -1
  270.     addi $3 $0 1
  271.  
  272.     bgtz $0 fail
  273.     addu $0 $0 $0        # Nop
  274. l7:    bgtz $3 l8
  275.     addu $0 $0 $0        # Nop
  276.     j fail
  277. l8:    bgtz $2 fail
  278.     addu $0 $0 $0        # Nop
  279.  
  280.     .data
  281. blez_:    .asciiz "Testing BLEZ\n"
  282.     .text
  283.     addi $v0 $0 4    # syscall 4 (print_str)
  284. #    la $a0 blez_
  285.     lui $a0, 0x1000
  286.     ori $a0 $a0 0x89
  287.     syscall
  288.  
  289.     addi $2 $0 -1
  290.     addi $3 $0 1
  291.  
  292.     blez $0 l9
  293.     addu $0 $0 $0        # Nop
  294.     j fail
  295. l9:    blez $2 l10
  296.     addu $0 $0 $0        # Nop
  297.     j fail
  298. l10:    blez $3 fail
  299.     addu $0 $0 $0        # Nop
  300.  
  301.     .data
  302. bltz_:    .asciiz "Testing BLTZ\n"
  303.     .text
  304.     addi $v0 $0 4    # syscall 4 (print_str)
  305. #    la $a0 bltz_
  306.     lui $a0, 0x1000
  307.     ori $a0 $a0 0x97
  308.  
  309.     syscall
  310.  
  311.     addi $2 $0 -1
  312.     addi $3 $0 1
  313.  
  314.     bltz $0 fail
  315.     addu $0 $0 $0        # Nop
  316. l11:    bltz $2 l12
  317.     addu $0 $0 $0        # Nop
  318.     j fail
  319. l12:    bltz $3 fail
  320.     addu $0 $0 $0        # Nop
  321.  
  322.     .data
  323. bne_:    .asciiz "Testing BNE\n"
  324.     .text
  325.     addi $v0 $0 4    # syscall 4 (print_str)
  326. #    la $a0 bne_
  327.     lui $a0, 0x1000
  328.     ori $a0 $a0 0xa5
  329.     syscall
  330.  
  331.     addi $2 $0 -1
  332.     addi $3 $0 1
  333.  
  334.     bne $0 $0 fail
  335.     addu $0 $0 $0        # Nop
  336.     bne $2 $2 fail
  337.     addu $0 $0 $0        # Nop
  338.     bne $3 $2 l16
  339.     addu $0 $0 $0        # Nop
  340. l16:
  341.     addu $0 $0 $0        # Nop
  342.  
  343.     .data
  344. j_:    .asciiz "Testing J\n"
  345.     .text
  346.     addi $v0 $0 4    # syscall 4 (print_str)
  347. #    la $a0 j_
  348.     lui $a0, 0x1000
  349.     ori $a0 $a0 0xb2
  350.     syscall
  351.  
  352.     j l17
  353.     j fail
  354. l17:      addu $0 $0 $0        # Nop
  355.  
  356.  
  357.     .data
  358. lb_:    .asciiz "Testing LB\n"
  359. # lb2_:    .asciiz "Expect a address error exceptions:\n  "
  360. lbd_:    .byte 1, -1, 0, 128
  361. lbd1_:    .word 0x76543210, 0xfedcba98
  362.     .text
  363.     addi $v0 $0 4    # syscall 4 (print_str)
  364. #    la $a0 lb_
  365.     lui $a0, 0x1000
  366.     ori $a0 $a0 0xbd
  367.  
  368.     syscall
  369.  
  370. #    la $2 lbd_
  371.     lui $2, 0x1000
  372.     ori $2 $2 0xc9
  373.     lb $3 0($2)
  374.       addu $4 $0 1
  375.     bne $3 $4 fail
  376.     lb $3 1($2)
  377.     addi $4 $0 -1
  378.     bne $3 $4 fail
  379.     lb $3 2($2)
  380.       addu $0 $0 $0        # Nop
  381.     bne $3 $0 fail
  382.     lb $3 3($2)
  383.     lui $4 0xffff
  384.     ori $4 0xff80
  385.     bne $3 $4 fail
  386.  
  387. #    la $t0 lbd1_
  388.     lui $t0, 0x1000
  389.     ori $t0 $t0 0xd0
  390.     lb $t1 0($t0)
  391.     addi $4 $0 0x10
  392.     bne $t1 $4 fail
  393.     lb $t1 1($t0)
  394.     addi $4 $0 0x32
  395.     bne $t1 $4 fail
  396.     lb $t1 2($t0)
  397.     addi $4 $0 0x54
  398.     bne $t1 $4 fail
  399.     lb $t1 3($t0)
  400.     addi $4 $0 0x76
  401.     bne $t1 $4 fail
  402.     lb $t1 4($t0)
  403.     lui $4 0xffff
  404.     addi $4 $0 0xff98
  405.     bne $t1 $4 fail
  406.     lb $t1 5($t0)
  407.     lui $4 0xffff
  408.     addi $4 $0 0xffba
  409.     bne $t1 $4 fail
  410.     lb $t1 6($t0)
  411.     lui $4 0xffff
  412.     addi $4 $0 0xffdc
  413.     bne $t1 $4 fail
  414.     lb $t1 7($t0)
  415.     lui $4 0xffff
  416.     addi $4 $0 0xfffe
  417.     bne $t1 $4 fail
  418.  
  419. #    li $v0 4    # syscall 4 (print_str)
  420. #    la $a0 lb2_
  421. #    syscall
  422. #
  423. #    lb $3 1000000($sp)
  424.  
  425.  
  426.     .data
  427. lbu_:    .asciiz "Testing LBU\n"
  428.     .text
  429.     addi $v0 $0 4    # syscall 4 (print_str)
  430. #    la $a0 lbu_
  431.     lui $a0, 0x1000
  432.     ori $a0 $a0 0xd8
  433.     syscall
  434.  
  435. #    la $2 lbd_
  436.     lui $2, 0x1000
  437.     ori $2 $2 0xc9
  438.  
  439.     lbu $3 0($2)
  440.     addi $4 $0 1
  441.     bne $3 $4 fail
  442.     lbu $3 1($2)
  443.     addi $4 $0 0xff
  444.     bne $3 $4 fail
  445.     lbu $3 2($2)
  446.         addu $0 $0 $0         # Nop 
  447.     bne $3 $0 fail
  448.     lbu $3 3($2)
  449.     addu $4 $0 128
  450.     bne $3 $4 fail
  451.     
  452. #    la $t0 lbd1_
  453.     lui $t0, 0x1000
  454.     ori $t0 $t0 0xd0
  455.     
  456.     lbu $t1 0($t0)
  457.     addi $4 $0 0x10
  458.     bne $t1 $4 fail
  459.     lbu $t1 1($t0)
  460.     addi $4 $0 0x32
  461.     bne $t1 $4 fail
  462.     lbu $t1 2($t0)
  463.     addi $4 $0 0x54
  464.     bne $t1 $4 fail
  465.     lbu $t1 3($t0)
  466.     addi $4 $0 0x76
  467.     bne $t1 $4 fail
  468.     lbu $t1 4($t0)
  469.     addi $4 $0 0x98
  470.     bne $t1 $4 fail
  471.     lbu $t1 5($t0)
  472.     addi $4 $0 0xba
  473.     bne $t1 $4 fail
  474.     lbu $t1 6($t0)
  475.     addi $4 $0 0xdc
  476.     bne $t1 $4 fail
  477.     lbu $t1 7($t0)
  478.     addi $4 $0 0xfe
  479.     bne $t1 $4 fail
  480.     addu $0 $0 $0          # Nop
  481.  
  482. #       Causes an exception -- do later.
  483. #    addi $v0 $0 4    # syscall 4 (print_str)
  484. #    la $a0 lb2_
  485. #    syscall
  486. #
  487. #    lbu $3 1000000($sp)
  488.  
  489.  
  490.     .data
  491. lh_:    .asciiz "Testing LH\n"
  492. #lh2_:    .asciiz "Expect two address error exceptions:\n    "
  493. lhd_:    .half 1, -1, 0, 0x8000
  494.     .text
  495.     addi $v0 $0 4    # syscall 4 (print_str)
  496. #    la $a0 lh_
  497.     lui $a0, 0x1000
  498.     ori $a0 $a0 0xe5
  499.     syscall
  500.  
  501. #    la $2 lhd_
  502.     lui $2, 0x1000
  503.     ori $2 $2 0xf2
  504.     lh $3 0($2)
  505.     addi $4 $0 1
  506.     bne $3 $4 fail
  507.     lh $3 2($2)
  508.     addi $4 $0 -1
  509.     bne $3 $4 fail
  510.     lh $3 4($2)
  511.     addi $4 $0 0
  512.     bne $3 $4 fail
  513.     lh $3 6($2)
  514.     lui $4 0xffff
  515.     ori $4 $4 0x8000
  516.     bne $3 $4 fail
  517.     addu $0 $0 $0     # Nop
  518.  
  519. #    addi $v0 $0 4    # syscall 4 (print_str)
  520. #    la $a0 lh2_
  521. #    syscall
  522. #
  523. #    lh $3 1000000($sp)
  524. #    lh $3 1000001($sp)
  525.  
  526.     .data
  527. lhu_:    .asciiz "Testing LHU\n"
  528.     .text
  529.     addi $v0 $0 4    # syscall 4 (print_str)
  530. #    la $a0 lhu_
  531.     lui $a0, 0x1000
  532.     ori $a0 $a0 0xfa
  533.     syscall
  534.  
  535. #    la $2 lhd_
  536.     lui $2, 0x1000
  537.     ori $2 $2 0xf2
  538.     lhu $3 0($2)
  539.     addi $4 $0 1
  540.     bne $3 $4 fail
  541.     lhu $3 2($2)
  542.     ori $4 $0 0xffff
  543.     bne $3 $4 fail
  544.     lhu $3 4($2)
  545.     addi $4 $0 0
  546.     bne $3 $4 fail
  547.     lhu $3 6($2)
  548.     ori $4 $0 0x8000
  549.     bne $3 $4 fail
  550.     addu $0 $0 $0   #Nop
  551.  
  552. #    addi $v0 $0 4    # syscall 4 (print_str)
  553. #    la $a0 lh2_
  554. #    syscall
  555. #
  556. #    lhu $3 1000000($sp)
  557. #    lhu $3 1000001($sp)
  558.  
  559.  
  560.     .data
  561. lui_:    .asciiz "Testing LUI\n"
  562.     .text
  563.     addi $v0 $0 4    # syscall 4 (print_str)
  564. #    la $a0 lui_
  565.     lui $a0, 0x1000
  566.     ori $a0 $a0 0x107
  567.     syscall
  568.  
  569.     lui $2 0
  570.     bne $2 $0 fail
  571.     lui $2 1
  572.     srl $2 $2 16
  573.     addiu $2 $2 -1    # Don't do compare directly since it uses LUI
  574.     bne $2 $0 fail
  575.     lui $2 1
  576.     andi $2 $2 0xffff
  577.     bne $2 $0 fail
  578.     lui $2 -1
  579.     srl $2 $2 16
  580.     addiu $2 $2 1
  581.     andi $2 $2 0xffff
  582.     bne $2 $0 fail
  583.     addu $0 $0 $0   #Nop
  584.  
  585.     .data
  586. lw_:    .asciiz "Testing LW\n"
  587. lwd_:    .word 1, -1, 0, 0x8000000
  588.     .text
  589.     addi $v0 $0 4    # syscall 4 (print_str)
  590. #    la $a0 lw_
  591.     lui $a0, 0x1000
  592.     ori $a0 $a0 0x114
  593.     syscall
  594.  
  595. #    la $2 lwd_
  596.     lui $2, 0x1000
  597.     ori $2 $2 0x120
  598.     lw $3 0($2)
  599.     addi $4 $0 1
  600.     bne $3 $4 fail
  601.     lw $3 4($2)
  602.     addi $4 $0 -1
  603.     bne $3 $4 fail
  604.     lw $3 8($2)
  605.     addi $4 $0 0
  606.     bne $3 $4 fail
  607.     lw $3 12($2)
  608.     lui $4 0x800
  609.     ori $4 $4 0x0000
  610.     bne $3 $4 fail
  611.  
  612.     add $2 $2 12
  613.     lw $3 -12($2)
  614.     addi $4 $0 1
  615.     bne $3 $4 fail
  616.     lw $3 -8($2)
  617.     addi $4 $0 -1
  618.     bne $3 $4 fail
  619.     lw $3 -4($2)
  620.     addi $4 $0 0
  621.     bne $3 $4 fail
  622.     lw $3 0($2)
  623.     lui $4 0x800
  624.     ori $4 $4 0x0000
  625.     bne $3 $4 fail
  626.     addu $0 $0 $0   #Nop
  627.  
  628. #    addi $v0 $0 4    # syscall 4 (print_str)
  629. #    la $a0 lh2_
  630. #    syscall
  631. #
  632. #    lw $3 1000000($sp)
  633. #    lw $3 1000001($sp)
  634.  
  635.     .data
  636. lwl_:    .asciiz "Testing LWL\n"
  637.     .align 2
  638. lwld_:    .byte 0 1 2 3 4 5 6 7
  639.     .text
  640.     addi $v0 $0 4    # syscall 4 (print_str)
  641. #    la $a0 lwl_
  642.     lui $a0, 0x1000
  643.     ori $a0 $a0 0x130
  644.     syscall
  645.  
  646. #    la $2 lwld_
  647.     lui $2, 0x1000
  648.     ori $2 $2 0x140
  649.     addu $3 $0 $0              # Move $3 $0
  650.     lwl $3 0($2)
  651.     addi $4 $0 0
  652.     bne $3 $4 fail
  653.     addu $3 $0 $0              # Move $3 $0
  654.     lwl $3 1($2)
  655.     lui $4 0x0100
  656.     ori $4 $4 0x0000
  657.     bne $3 $4 fail
  658.     addi $3 $0 5
  659.     lwl $3 1($2)
  660.     lui $4 0x0100
  661.     ori $4 $4 0x0005
  662.     bne $3 $4 fail
  663.     addu $3 $0 $0              # Move $3 $0
  664.     lwl $3 2($2)
  665.     lui $4 0x0201
  666.     ori $4 $4 0x0000
  667.     bne $3 $4 fail
  668.     addi $3 $0 5
  669.     lwl $3 2($2)
  670.     lui $4 0x0201
  671.     ori $4 $4 0x0005
  672.     bne $3 $4 fail
  673.     addu $3 $0 $0              # Move $3 $0
  674.     lwl $3 3($2)
  675.     lui $4 0x0302
  676.     ori $4 $4 0x0100
  677.     bne $3 $4 fail
  678.     addi $3 $0 5
  679.     lwl $3 3($2)
  680.     lui $4 0x0302
  681.     ori $4 $4 0x0100
  682.     bne $3 $4 fail
  683.     addu $0 $0 $0    # Nop
  684.  
  685. #    addi $v0 $0 4    # syscall 4 (print_str)
  686. #    la $a0 lh2_
  687. #    syscall
  688. #
  689. #    lwl $3 1000000($sp)
  690. #    lwl $3 1000001($sp)
  691.  
  692.  
  693.  
  694.     .data
  695. lwr_:    .asciiz "Testing LWR\n"
  696.     .align 2
  697. lwrd_:    .byte 0 1 2 3 4 5 6 7
  698.     .text
  699.     addi $v0 $0 4    # syscall 4 (print_str)
  700. #    la $a0 lwr_
  701.     lui $a0, 0x1000
  702.     ori $a0 $a0 0x148
  703.     syscall
  704.  
  705. #    la $2 lwrd_
  706.     lui $2, 0x1000
  707.     ori $2 $2 0x158
  708.  
  709.     lui $3 0x0000
  710.     ori $3 $3 0x0500
  711.     lwr $3 0($2)
  712.     lui $4 0x0302
  713.     ori $4 $4 0x0100
  714.     bne $3 $4 fail
  715.     addu $3 $0 $0              # Move $3 $0
  716.     lwr $3 1($2)
  717.     lui $4 0x0003
  718.     ori $4 $4 0x0201
  719.     bne $3 $4 fail
  720.     lui $3 0x5000
  721.     ori $3 $3 0x0000
  722.     lwr $3 1($2)
  723.     lui $4 0x5003
  724.     ori $4 $4 0x0201
  725.     bne $3 $4 fail
  726.     addu $3 $0 $0              # Move $3 $0
  727.     lwr $3 2($2)
  728.     ori $4 $0 0x0302
  729.     bne $3 $4 fail
  730.     lui $3 0x5000
  731.     ori $3 $3 0x0000
  732.     lwr $3 2($2)
  733.     lui $4 0x5000
  734.     ori $4 $4 0x0302
  735.     bne $3 $4 fail
  736.     addu $0 $0 $0            # Nop
  737.  
  738. #    addi $v0 $0 4    # syscall 4 (print_str)
  739. #    la $a0 lh2_
  740. #    syscall
  741. #
  742. #    lwr $3 1000000($sp)
  743. #    lwr $3 1000001($sp)
  744.  
  745.     .data
  746. nor_:    .asciiz "Testing NOR\n"
  747.     .text
  748.     addi $v0 $0 4    # syscall 4 (print_str)
  749. #    la $a0 nor_
  750.     lui $a0, 0x1000
  751.     ori $a0 $a0 0x160
  752.     syscall
  753.  
  754.     addi $2 $0 1
  755.     addi $3 $0 -1
  756.  
  757.     nor $4 $0 $0
  758.     addi $5 $0 -1
  759.     bne $4 $5 fail
  760.     nor $4 $2 $2
  761.     lui $5 0xffff
  762.     ori $5 $5 0xfffe
  763.     bne $4 $5 fail
  764.     nor $4 $2 $3
  765.     bne $4 $0 fail
  766.     addu $0 $0 $0             #Nop
  767.  
  768.     .data
  769. or_:    .asciiz "Testing OR\n"
  770.     .text
  771.     addi $v0 $0 4    # syscall 4 (print_str)
  772. #    la $a0 or_
  773.     lui $a0, 0x1000
  774.     ori $a0 $a0 0x16d
  775.     syscall
  776.  
  777.     addi $2 $0 1
  778.     addi $3 $0 -1
  779.  
  780.     or $4 $0 $0
  781.     bne $4 $0 fail
  782.     or $4 $2 $2
  783.     addi $5 $0 1
  784.     bne $4 $5 fail
  785.     or $4 $2 $3
  786.     addi $5 $0 -1
  787.     bne $4 $5  fail
  788.     addu $0 $0 $0   #Nop
  789.  
  790.  
  791.     .data
  792. ori_:    .asciiz "Testing ORI\n"
  793.     .text
  794.     addi $v0 $0 4    # syscall 4 (print_str)
  795. #    la $a0 ori_
  796.     lui $a0, 0x1000
  797.     ori $a0 $a0 0x179
  798.     syscall
  799.  
  800.     addi $2 $0 1
  801.     addi $3 $0 -1
  802.  
  803.     ori $4 $0 0
  804.     bne $4 $0 fail
  805.     ori $4 $2 1
  806.     addi $5 $0 1
  807.     bne $4 $5 fail
  808.     ori $4 $3 -1
  809.     lui $5 0xffff
  810.     ori $5 $5 0xffff
  811.     bne $4 $5 fail
  812.     addu $0 $0 $0   #Nop
  813.  
  814.     .data
  815. sb_:    .asciiz "Testing SB\n"
  816. #sb2_:    .asciiz "Expect a address error exceptions:\n  "
  817.     .align 2
  818. sbd_:    .byte 0, 0, 0, 0
  819.     .text
  820.     addi $v0 $0 4    # syscall 4 (print_str)
  821. #    la $a0 sb_
  822.     lui $a0, 0x1000
  823.     ori $a0 $a0 0x186
  824.     syscall
  825.  
  826.     addi $3 $0, 1
  827. #    la $2 sbd_
  828.     lui $2, 0x1000
  829.     ori $2 $2 0x194
  830.     sb $3 0($2)
  831.     lw $4 0($2)
  832.     ori $5 $0 0x1
  833.     bne $4 $5 fail
  834.     addi $3 $0 2
  835.     sb $3 1($2)
  836.     lw $4 0($2)
  837.     ori $5 $0 0x201
  838.     bne $4 $5 fail
  839.     addi $3 $0 3
  840.     sb $3 2($2)
  841.     lw $4 0($2)
  842.     lui $5 0x3
  843.     ori $5 $5 0x0201
  844.     bne $4 $5 fail
  845.     addi $3 $0 4
  846.     sb $3 3($2)
  847.     lw $4 0($2)
  848.     lui $5 0x0403
  849.     ori $5 $5 0x0201
  850.     bne $4 $5 fail
  851.     addu $0 $0 $0   #Nop
  852.  
  853. #    addi $v0 $0 4    # syscall 4 (print_str)
  854. #    la $a0 sb2_
  855. #    syscall
  856. #
  857. #    sb $3 1000000($sp)
  858.  
  859.  
  860. # RFE tested previously
  861.  
  862.     .data
  863. sh_:    .asciiz "Testing SH\n"
  864. #sh2_:    .asciiz "Expect two address error exceptions:\n    "
  865.     .align 2
  866. shd_:    .byte 0, 0, 0, 0
  867.     .text
  868.     addi $v0 $0 4    # syscall 4 (print_str)
  869. #    la $a0 sh_
  870.     lui $a0, 0x1000
  871.     ori $a0 $a0 0x198
  872.     syscall
  873.  
  874.     addi $3 $0, 1
  875. #    la $2 shd_
  876.     lui $2, 0x1000
  877.     ori $2 $2 0x1a4
  878.  
  879.     sh $3 0($2)
  880.     lw $4 0($2)
  881.     ori $5 $0 0x1
  882.     bne $4 $5 fail
  883.     addi $3 $0 2
  884.     sh $3 2($2)
  885.     lw $4 0($2)
  886.     lui $5 0x2
  887.     ori $5 $5 0x0001
  888.     bne $4 $5 fail
  889.     addu $0 $0 $0   #Nop
  890.  
  891. #    addi $v0 $0 4    # syscall 4 (print_str)
  892. #    la $a0 sh2_
  893. #    syscall
  894. #
  895. #    sh $3 1000000($sp)
  896. #    sh $3 1000001($sp)
  897.  
  898.     .data
  899. sll_:    .asciiz "Testing SLL\n"
  900.     .text
  901.     addi $v0 $0 4    # syscall 4 (print_str)
  902. #    la $a0 sll_
  903.     lui $a0, 0x1000
  904.     ori $a0 $a0 0x1a8
  905.     syscall
  906.  
  907.     addi $2 $0 1
  908.  
  909.     sll $3 $2 0
  910.     ori $4 $0 1
  911.     bne $3 $4 fail
  912.     sll $3 $2 1
  913.     ori $4 $0 2
  914.     bne $3 $4 fail
  915.     sll $3 $2 16
  916.     lui $4 0x1
  917.     ori $4 $4 0x0000
  918.     bne $3 $4 fail
  919.     sll $3 $2 32
  920.     ori $4 $0 1
  921.     bne $3 $4 fail
  922.     addu $0 $0 $0           # Nop
  923.  
  924.     .data
  925. sllv_:    .asciiz "Testing SLLV\n"
  926.     .text
  927.     addi $v0 $0 4    # syscall 4 (print_str)
  928. #    la $a0 sllv_
  929.     lui $a0, 0x1000
  930.     ori $a0 $a0 0x1b5
  931.     syscall
  932.  
  933.     addi $2 $0 1
  934.     addi $4 $0 0
  935.     sllv $3 $2 $4
  936.     ori $5 $0 1
  937.     bne $3 $5 fail
  938.     addi $4 $0 1
  939.     sllv $3 $2 $4
  940.     ori $5 $0 2
  941.     bne $3 $5 fail
  942.     addi $4 $0 16
  943.     sllv $3 $2 $4
  944.     lui $5 0x1
  945.     ori $5 $5 0x0000
  946.     bne $3 $5 fail
  947.     addi $4 $0 32
  948.     sllv $3 $2 $4
  949.     ori $5 $0 1
  950.     bne $3 $5 fail
  951.     addu $0 $0 $0            # Nop
  952.  
  953.     .data
  954. slt_:    .asciiz "Testing SLT\n"
  955.     .text
  956.     addi $v0 $0 4    # syscall 4 (print_str)
  957. #    la $a0 slt_
  958.     lui $a0, 0x1000
  959.     ori $a0 $a0 0x1c3
  960.     syscall
  961.  
  962.     ori $5 $0 1
  963.  
  964.     slt $3 $0 $0
  965.     bne $3 $0 fail
  966.     addi $2 $0 1
  967.     slt $3 $2 $0
  968.     bne $3 $0 fail
  969.     slt $3 $0 $2
  970.     bne $3 $5 fail
  971.     addi $2 $0 -1
  972.     slt $3 $2 $0
  973.     bne $3 $5 fail
  974.     slt $3 $0 $2
  975.     bne $3 $0 fail
  976.     addi $2 $0 -1
  977.     addi $4 $0 1
  978.     slt $3 $2 $4
  979.     bne $3 $5 fail
  980.     addu $0 $0 $0         # Nop
  981.  
  982.     .data
  983. slti_:    .asciiz "Testing SLTI\n"
  984.     .text
  985.     addi $v0 $0 4    # syscall 4 (print_str)
  986. #    la $a0 slti_
  987.     lui $a0, 0x1000
  988.     ori $a0 $a0 0x1d0
  989.     syscall
  990.  
  991.     ori $5 $0 1
  992.  
  993.     slti $3 $0 0
  994.     bne $3 $0 fail
  995.     addi $2 $0 1
  996.     slti $3 $2 0
  997.     bne $3 $0 fail
  998.     slti $3 $0 1
  999.     bne $3 $5 fail
  1000.     addi $2 $0 -1
  1001.     slti $3 $2 0
  1002.     bne $3 $5 fail
  1003.     slti $3 $0 -1
  1004.     bne $3 $0 fail
  1005.     addi $2 $0 -1
  1006.     addi $4 $0 1
  1007.     slti $3 $2 1
  1008.     bne $3 $5 fail
  1009.     slti $3 $4 -1
  1010.     bne $3 $0 fail
  1011.     addu $0 $0 $0           # Nop
  1012.  
  1013.  
  1014.     .data
  1015. sltiu_:    .asciiz "Testing SLTIU\n"
  1016.     .text
  1017.     addi $v0 $0 4    # syscall 4 (print_str)
  1018. #    la $a0 sltiu_
  1019.     lui $a0, 0x1000
  1020.     ori $a0 $a0 0x1de
  1021.     syscall
  1022.  
  1023.     ori $5 $0 1
  1024.  
  1025.     sltiu $3 $0 0
  1026.     bne $3 $0 fail
  1027.     addi $2 $0 1
  1028.     sltiu $3 $2 0
  1029.     bne $3 $0 fail
  1030.     sltiu $3 $0 1
  1031.     bne $3 $5 fail
  1032.     addi $2 $0 -1
  1033.     sltiu $3 $2 0
  1034.     bne $3 $0 fail
  1035.     sltiu $3 $0 -1
  1036.     bne $3 $5 fail
  1037.     addi $2 $0 -1
  1038.     addi $4 $0 1
  1039.     sltiu $3 $2 1
  1040.     bne $3 $0 fail
  1041.     sltiu $3 $4 -1
  1042.     bne $3 $5 fail
  1043.     addu $0 $0 $0        # Nop
  1044.  
  1045.  
  1046.     .data
  1047. sltu_:    .asciiz "Testing SLTU\n"
  1048.     .text
  1049.     addi $v0 $0 4    # syscall 4 (print_str)
  1050. #    la $a0 sltu_
  1051.     lui $a0, 0x1000
  1052.     ori $a0 $a0 0x1ed
  1053.     syscall
  1054.  
  1055.     ori $5 $0 1
  1056.  
  1057.     sltu $3 $0 $0
  1058.     bne $3 $0 fail
  1059.     addi $2 $0 1
  1060.     sltu $3 $2 $0
  1061.     bne $3 $0 fail
  1062.     sltu $3 $0 $2
  1063.     bne $3 $5 fail
  1064.     addi $2 $0 -1
  1065.     sltu $3 $2 $0
  1066.     bne $3 $0 fail
  1067.     sltu $3 $0 $2
  1068.     bne $3 $5 fail
  1069.     addi $2 $0 -1
  1070.     addi $4 $0 1
  1071.     sltu $3 $2 $4
  1072.     bne $3 $0 fail
  1073.     addu $0 $0 $0            # Nop
  1074.  
  1075.     .data
  1076. sra_:    .asciiz "Testing SRA\n"
  1077.     .text
  1078.     addi $v0 $0 4    # syscall 4 (print_str)
  1079. #    la $a0 sra_
  1080.     lui $a0, 0x1000
  1081.     ori $a0 $a0 0x1fb
  1082.     syscall
  1083.  
  1084.     addi $2 $0 1
  1085.     sra $3 $2 0
  1086.     ori $5 $0 1
  1087.     bne $3 $5 fail
  1088.     sra $3 $2 1
  1089.     bne $3 $0 fail
  1090.     addi $2 $0 0x1000
  1091.     sra $3 $2 4
  1092.     ori $5 $0 0x100
  1093.     bne $3 $5 fail
  1094.     lui $5 0x8000
  1095.     ori $5 $5 0x0000
  1096.     add $2 $0 $5
  1097.     sra $3 $2 4
  1098.     lui $5 0xf800
  1099.     ori $5 $5 0x0000
  1100.     bne $3 $5 fail
  1101.     addu $0 $0 $0                # Nop
  1102.  
  1103.     .data
  1104. srav_:    .asciiz "Testing SRAV\n"
  1105.     .text
  1106.     addi $v0 $0 4    # syscall 4 (print_str)
  1107. #    la $a0 srav_
  1108.     lui $a0, 0x1000
  1109.     ori $a0 $a0 0x208
  1110.     syscall
  1111.  
  1112.     addi $2 $0 1
  1113.     addi $4 $0 0
  1114.     srav $3 $2 $4
  1115.     ori $5 $0 1
  1116.     bne $3 $5 fail
  1117.     addi $4 $0 1
  1118.     srav $3 $2 $4
  1119.     bne $3 $0 fail
  1120.     addi $2 $0 0x1000
  1121.     addi $4 $0 4
  1122.     srav $3 $2 $4
  1123.     ori $5 $0 0x100
  1124.     bne $3 $5 fail
  1125.     lui $5 0x8000
  1126.     ori $5 $5 0x0000
  1127.     add $2 $0 $5
  1128.     addi $4 $0 4
  1129.     srav $3 $2 $4
  1130.     lui $5 0xf800
  1131.     ori $5 $5 0x0000
  1132.     bne $3 $5 fail
  1133.     addu $0 $0 $0           # Nop
  1134.  
  1135.  
  1136.  
  1137.     .data
  1138. srl_:    .asciiz "Testing SRL\n"
  1139.     .text
  1140.     addi $v0 $0 4    # syscall 4 (print_str)
  1141. #    la $a0 srl_
  1142.     lui $a0, 0x1000
  1143.     ori $a0 $a0 0x216
  1144.     syscall
  1145.  
  1146.     addi $2 $0 1
  1147.     srl $3 $2 0
  1148.     ori $5 $0 1
  1149.     bne $3 $5 fail
  1150.     srl $3 $2 1
  1151.     bne $3 $0 fail
  1152.     addi $2 $0 0x1000
  1153.     srl $3 $2 4
  1154.     ori $5 $0 0x100
  1155.     bne $3 $5 fail
  1156.     lui $5 0x8000
  1157.     ori $5 $0 0x0000
  1158.     add $2 $0 $5
  1159.     srl $3 $2 4
  1160.     lui $5 0x0800
  1161.     ori $5 $0 0x0000
  1162.     bne $3 $5 fail
  1163.     addu $0 $0 $0           #Nop 
  1164.  
  1165.  
  1166.     .data
  1167. srlv_:    .asciiz "Testing SRLV\n"
  1168.     .text
  1169.     addi $v0 $0 4    # syscall 4 (print_str)
  1170. #    la $a0 srlv_
  1171.     lui $a0, 0x1000
  1172.     ori $a0 $a0 0x223
  1173.     syscall
  1174.  
  1175.     addi $2 $0 1
  1176.     addi $4 $0 0
  1177.     srlv $3 $2 $4
  1178.     ori $5 $0 1
  1179.     bne $3 $5 fail
  1180.     addi $4 $0 1
  1181.     srlv $3 $2 $4
  1182.     bne $3 $0 fail
  1183.     addi $2 $0 0x1000
  1184.     addi $4 $0 4
  1185.     srlv $3 $2 $4
  1186.     ori $5 $0 0x100
  1187.     bne $3 $5 fail
  1188.     lui $5 0x8000
  1189.     ori $5 $5 0x0000
  1190.     add $2 $0 $5
  1191.     addi $4 $0 4
  1192.     srlv $3 $2 $4
  1193.     lui $5 0x0800
  1194.     ori $5 $5 0x0000
  1195.     bne $3 $5 fail
  1196.     addu $0 $0 $0                     # Nop
  1197.  
  1198.  
  1199.     .data
  1200. sub_:    .asciiz "Testing SUB\n"
  1201. # sub1_:    .asciiz "Expect an overflow exceptions:\n  "
  1202.     .text
  1203.     addi $v0 $0 4    # syscall 4 (print_str)
  1204. #    la $a0 sub_
  1205.     lui $a0, 0x1000
  1206.     ori $a0 $a0 0x231
  1207.     syscall
  1208.  
  1209.     addi $2 $0 1
  1210.     addi $3 $0 -1
  1211.  
  1212.     sub $4, $0, $0
  1213.     bne $4 $0 fail
  1214.     sub $4, $0, $2
  1215.     addi $5 $0 -1
  1216.     bne $4 $5 fail
  1217.     sub $4, $2, $0
  1218.     ori $5 $0 1
  1219.     bne $4, $5 fail
  1220.     sub $4, $2, $3
  1221.     ori $5 $0 2
  1222.     bne $4, $5 fail
  1223.     sub $4, $3, $2
  1224.     addi $5 $0 -2
  1225.     bne $4, $5 fail
  1226.     addu $0 $0 $0                   # Nop
  1227.  
  1228. #    addi $v0 $0 4    # syscall 4 (print_str)
  1229. #    la $a0 sub1_
  1230. #    syscall
  1231. #    addi $2 $0 0x80000000
  1232. #    addi $3 $0 1
  1233. #    sub $4, $3, $2
  1234.  
  1235.     .data
  1236. subu_:    .asciiz "Testing SUBU\n"
  1237.     .text
  1238.     addi $v0 $0 4    # syscall 4 (print_str)
  1239. #    la $a0 subu_
  1240.     lui $a0, 0x1000
  1241.     ori $a0 $a0 0x23e
  1242.     syscall
  1243.  
  1244.     addi $2 $0 1
  1245.     addi $3 $0 -1
  1246.  
  1247.     subu $4, $0, $0
  1248.     bne $4 $0 fail
  1249.     subu $4, $0, $2
  1250.     addi $5 $0 -1
  1251.     bne $4 $5 fail
  1252.     subu $4, $2, $0
  1253.     addi $5 $0 1
  1254.     bne $4, $5 fail
  1255.     subu $4, $2, $3
  1256.     addi $5 $0 2
  1257.     bne $4, $5 fail
  1258.     subu $4, $3, $2
  1259.     addi $5 $0 -2
  1260.     bne $4, $5 fail
  1261.  
  1262.     lui $5 0x8000
  1263.     ori $5 $5 0x0000
  1264.     add $2 $0 $5
  1265.     addi $3 $0 1
  1266.     subu $4, $3, $2
  1267.  
  1268.     .data
  1269. sw_:    .asciiz "Testing SW\n"
  1270. #sw2_:    .asciiz "Expect two address error exceptions:\n    "
  1271.     .align 2
  1272. swd_:    .byte 0, 0, 0, 0
  1273.     .text
  1274.     addi $v0 $0 4    # syscall 4 (print_str)
  1275. #    la $a0 sw_
  1276.     lui $a0, 0x1000
  1277.     ori $a0 $a0 0x24c
  1278.     syscall
  1279.  
  1280. #    addi $3 $0, 0x7f7f7f7f
  1281.     lui $3 0x7f7f
  1282.     ori $3 $3 0x7f7f
  1283. #    la $2 swd_
  1284.     lui $2, 0x1000
  1285.     ori $2 $2 0x258
  1286.     sw $3 0($2)
  1287.     lw $4 0($2)
  1288.     lui $5 0x7f7f
  1289.     ori $5 $5 0x7f7f
  1290.     bne $4 $5 fail
  1291.  
  1292. #    addi $v0 $0 4    # syscall 4 (print_str)
  1293. #    la $a0 sw2_
  1294. #    syscall
  1295. #
  1296. #    sw $3 1000000($sp)
  1297. #    sw $3 1000001($sp)
  1298.  
  1299.  
  1300.     .data
  1301. swl_:    .asciiz "Testing SWL\n"
  1302.     .align 2
  1303. swld_:    .word 0 0
  1304.     .text
  1305.     addi $v0 $0 4    # syscall 4 (print_str)
  1306. #    la $a0 swl_
  1307.     lui $a0, 0x1000
  1308.     ori $a0 $a0 0x25c
  1309.     syscall
  1310.  
  1311. #    la $2 swld_
  1312.     lui $2, 0x1000
  1313.     ori $2 $2 0x26c
  1314. #       addi $3 $0 0x01000000    
  1315.     lui $3 0x0100
  1316.     ori $3 $3 0x0000
  1317.     swl $3 0($2)
  1318.     lw $4 0($2)
  1319.     ori $5 $0 0x1
  1320.     bne $4 $5 fail
  1321.  
  1322. #    addi $3 $0 0x01020000
  1323.     lui $3 0x0102
  1324.     ori $3 $3 0x0000
  1325.     swl $3 1($2)
  1326.     lw $4 0($2)
  1327.     ori $5 $0  0x0102
  1328.     bne $4 $5 fail
  1329.  
  1330. #    addi $3 $0 0x01020300
  1331.     lui $3 0x0102
  1332.     ori $3 $3 0x0300
  1333.     swl $3 2($2)
  1334.     lw $4 0($2)
  1335.     lui $5 0x01
  1336.     ori $5 $5 0x0203
  1337.     bne $4 $5 fail
  1338.  
  1339. #    addi $3 $0 0x01020304
  1340.     lui $3 0x0102
  1341.     ori $3 $3 0x0304
  1342.     swl $3 3($2)
  1343.     lw $4 0($2)
  1344.     lui $5 0x0102
  1345.     ori $5 $5 0x0304
  1346.     bne $4 $5 fail
  1347.     addu $0 $0 $0         # Nop
  1348.  
  1349.  
  1350.     .data
  1351. swr_:    .asciiz "Testing SWR\n"
  1352.     .align 2
  1353. swrd_:    .word 0 0
  1354.     .text
  1355.     addi $v0 $0 4    # syscall 4 (print_str)
  1356. #    la $a0 swr_
  1357.     lui $a0, 0x1000
  1358.     ori $a0 $a0 0x274
  1359.     syscall
  1360.  
  1361. #    la $2 swrd_
  1362.     lui $2, 0x1000
  1363.     ori $2 $2 0x284
  1364.     addi $3 $0 1
  1365.     swr $3 0($2)
  1366.     lw $4 0($2)
  1367.     ori $5 $0 1
  1368.     bne $4 $5 fail
  1369.  
  1370.     addi $3 $0 0x0102
  1371.     swr $3 1($2)
  1372.     lw $4 0($2)
  1373.     lui $5 0x1
  1374.     ori $5 $5 0x0201
  1375.     bne $4 $5 fail
  1376.  
  1377. #    addi $3 $0 0x010203
  1378.     lui $3 0x01
  1379.     ori $3 $3 0x0203
  1380.     swr $3 2($2)
  1381.     lw $4 0($2)
  1382.     lui $5 0x203
  1383.     ori $5 $5 0x0201
  1384.     bne $4 $5 fail
  1385.  
  1386. #    addi $3 $0 0x01020304
  1387.     lui $3 0x0102
  1388.     ori $3 $3 0x0304
  1389.     swr $3 3($2)
  1390.     lw $4 0($2)
  1391.     lui $5 0x403
  1392.     ori $5 $5 0x0201
  1393.     bne $4 $5 fail
  1394.     addu $0 $0 $0                     #Nop
  1395.  
  1396.  
  1397.     .data
  1398. xor_:    .asciiz "Testing XOR\n"
  1399.     .text
  1400.     addi $v0 $0 4    # syscall 4 (print_str)
  1401. #    la $a0 xor_
  1402.     lui $a0, 0x1000
  1403.     ori $a0 $a0 0x28c
  1404.     syscall
  1405.  
  1406.     addi $2 $0 1
  1407.     addi $3 $0 -1
  1408.  
  1409.     xor $4 $0 $0
  1410.     bne $4 $0 fail
  1411.     xor $4 $3 $3
  1412.     bne $4 $0 fail
  1413.     xor $4 $2 $3
  1414.     lui $5 0xffff
  1415.     ori $5 $5 0xfffe 
  1416.     bne $4 $5 fail
  1417.     addu $0 $0 $0                #Nop
  1418.  
  1419.     .data
  1420. xori_:    .asciiz "Testing XORI\n"
  1421.     .text
  1422.     addi $v0 $0 4    # syscall 4 (print_str)
  1423. #    la $a0 xori_
  1424.     lui $a0, 0x1000
  1425.     ori $a0 $a0 0x299
  1426.     syscall
  1427.  
  1428.     addi $2 $0 1
  1429.     ori $3 $0 -1
  1430.  
  1431.     xori $4 $0 0
  1432.     bne $4 $0 fail
  1433.     xori $4 $3 -1
  1434.     bne $4 $0 fail
  1435.     xori $4 $2 -1
  1436. #    lui $5 0xffff
  1437.     ori $5 $0 0xfffe
  1438.     bne $4 $5 fail
  1439.  
  1440.     .data
  1441. jal_:    .asciiz "Testing JAL\n"
  1442.     .text
  1443.     addi $v0 $0 4    # syscall 4 (print_str)
  1444. #    la $a0 jal_
  1445.     lui $a0, 0x1000
  1446.     ori $a0 $a0 0x2a7
  1447.     syscall
  1448.  
  1449.     jal l18
  1450.     addu $0 $0 $0                # Nop
  1451. l19:    j l20                        # 0x00400ea0
  1452.     addu $0 $0 $0                # Nop
  1453. l18:    lui $4 0x0040                # to replace la $4 l19
  1454.     ori $4 $4 0x0eb0             # bare machine has a delay slot.
  1455.     bne $31 $4 fail
  1456.     addu $0 $0 $0                #Nop
  1457.     jr $31
  1458.     addu $0 $0 $0                #Nop
  1459. l20:       addu $0 $0 $0                #Nop  -- 0x00400ebc
  1460.  
  1461.  
  1462.     .data
  1463. jalr_:    .asciiz "Testing JALR\n"
  1464. #jalr2_:    .asciiz "Expect an non-word boundary exception:\n  "
  1465.     .text
  1466.     addi $v0 $0 4    # syscall 4 (print_str) 0x00400ec0
  1467. #    la $a0 jalr_
  1468.     lui $a0, 0x1000
  1469.     ori $a0 $a0 0x2b4
  1470.     syscall                      
  1471.  
  1472. #    la $2 l21
  1473.     lui $2 0x0040                # 0x00400ed0
  1474.     ori $2 $2 0x0ef4
  1475.     addu $4 $0 $2
  1476.     jalr $3, $2
  1477.     addu $0 $0 $0                #Nop -- 00400ee0
  1478. l23:    j l22
  1479. l21:    addu $0 $0 $0             # la $4 l21  -- delay slot.
  1480.     bne $3 $4 fail
  1481.     addu $0 $0 $0             # Nop  -- 00400ef0
  1482.     jr $3                     
  1483. l22:    addu $0 $0 $0             # Nop
  1484.  
  1485. #       li $v0 4    # syscall 4 (print_str)
  1486. #    la $a0 jalr2_
  1487. #    syscall
  1488. #    la $2 l24
  1489. #    add $2 $2 2
  1490. # l24:    jalr $3 $2
  1491.  
  1492.  
  1493.     .data
  1494. bgezal_:.asciiz "Testing BGEZAL\n"
  1495.     .text
  1496.     addi $v0 $0 4    # syscall 4 (print_str)
  1497. #    la $a0 bgezal_
  1498.     lui $a0, 0x1000           # 00400f00
  1499.     ori $a0 $a0 0x2c2
  1500.     syscall                   
  1501.  
  1502.     addi $2 $0 -1
  1503.     addi $3 $0 1              # 00400f10
  1504.  
  1505.     bgezal $0 l5
  1506.     addu $0 $0 $0             # Nop
  1507.     j fail
  1508.     addu $0 $0 $0             # Nop -- 00400f20
  1509. l5:    bgezal $2 fail
  1510.     addu $0 $0 $0             # Nop 
  1511.     bgezal $3 l6
  1512.     addu $0 $0 $0             # Nop -- 00400f30
  1513. l55:    j fail
  1514.     addu $0 $0 $0             # Nop 
  1515. l6:    lui $4 0x0040             #  la $4 l55
  1516.     ori $4 $4 0x0f48          # 00400f40
  1517.     bne $31 $4 fail
  1518.     addu $0 $0 $0             # Nop
  1519.  
  1520.     .data
  1521. bltzal_:.asciiz "Testing BLTZAL\n"
  1522.     .text
  1523.     addi $v0 $0 4    # syscall 4 (print_str)
  1524. #    la $a0 bltzal_
  1525.     lui $a0, 0x1000           # 00400f50
  1526.     ori $a0 $a0 0x2d2
  1527.     syscall
  1528.  
  1529.     addi $2 $0 -1
  1530.     addi $3 $0 1              # 00400f60
  1531.  
  1532.     bltzal $0 fail
  1533.     addu $0 $0 $0          # Nop
  1534.     bltzal $3 fail
  1535.     addu $0 $0 $0          # Nop --  00400f70
  1536. l13:    bltzal $2 l15
  1537.     addu $0 $0 $0          # Nop 
  1538. l14:    j fail
  1539.     addu $0 $0 $0          # Nop --  00400f80
  1540. l15:    lui $4 0x0040          # la $4 l14
  1541.     ori $4 $4 0x0f90
  1542.     bne $31 $4 fail
  1543.     addu $0 $0 $0          # Nop --  00400f90
  1544.  
  1545. # Testing the exceptions
  1546.  
  1547.     .data
  1548. break_:    .asciiz "Testing BREAK\nExpect an exception message:\n  "
  1549. #    .text
  1550. #    addi $v0 $0 4    # syscall 4 (print_str)
  1551. #    la $a0 break_
  1552. #    lui $a0, 0x1000
  1553. #    ori $a0 $a0 0x2e2
  1554. #    syscall
  1555.  
  1556. #    break 3
  1557.  
  1558.  
  1559.     .data
  1560. ccp_:    .asciiz "Testing move to/from coprocessor control z\n"
  1561.     .text
  1562.     addi $v0 $0 4    # syscall 4 (print_str)
  1563. #    la $a0 ccp_
  1564.     lui $a0, 0x1000
  1565.     ori $a0 $a0 0x310
  1566.     syscall
  1567.  
  1568. #    li $2 0x7f7f
  1569.     addi $2 $0 0x7f7f
  1570.     ctc0 $2 $3
  1571.     addu $0 $0 $0                #Nop
  1572.     cfc0 $4 $3
  1573.     addu $0 $0 $0                #Nop
  1574.     bne $2 $4 fail
  1575. #    li $2 0x7f7f
  1576. #       Skip floating point stuff for now.
  1577. #    addi $2 $0 0x7f7f
  1578. #    ctc1 $2 $3
  1579. #    addu $0 $0 $0                #Nop
  1580. #    cfc1 $4 $3
  1581. #    addu $0 $0 $0                #Nop
  1582. #    bne $2 $4 fail
  1583. #    li $2 0x7f7f
  1584.     addi $2 $0 0x7f7f
  1585.     ctc2 $2 $3
  1586.     addu $0 $0 $0                #Nop
  1587.     cfc2 $4 $3
  1588.     addu $0 $0 $0                #Nop
  1589.     bne $2 $4 fail
  1590. #    li $2 0x7f7f
  1591.     addi $2 $0 0x7f7f
  1592.     ctc3 $2 $3
  1593.     addu $0 $0 $0                #Nop
  1594.     cfc3 $4 $3
  1595.     addu $0 $0 $0                #Nop
  1596.     bne $2 $4 fail
  1597.     addu $0 $0 $0            # Nop
  1598.  
  1599.  
  1600.     .data
  1601. mcp_:    .asciiz "Testing move to/from coprocessor z\n"
  1602.     .text
  1603.     addi $v0 $0 4    # syscall 4 (print_str)
  1604. #    la $a0 mcp_
  1605.     lui $a0, 0x1000
  1606.     ori $a0 $a0 0x33c
  1607.     syscall
  1608.  
  1609. #    li $2 0x7f7f
  1610.     addi $2 $0 0x7f7f
  1611.     mtc0 $2 $3
  1612.     addu $0 $0 $0            # Nop
  1613.     mfc0 $4 $3
  1614.     addu $0 $0 $0            # Nop
  1615.     bne $2 $4 fail
  1616. #       Skip FP for now.
  1617. #    li $2 0x7f7f
  1618. #    addi $2 $0 0x7f7f
  1619. #    mtc1 $2 $3
  1620. #    addu $0 $0 $0            # Nop
  1621. #    mfc1 $4 $f3
  1622. #    addu $0 $0 $0            # Nop
  1623. #    bne $2 $4 fail
  1624.  
  1625. #    li $2 0x7f7f
  1626. #    addi $2 $0 0x7f7f
  1627. #    li $3 0xf7f7
  1628. #    addi $3 $0 0x7f7f
  1629. #    mtc1.d $2 $4
  1630. #    mfc1.d $6 $4
  1631. #    bne $2 $6 fail
  1632. #    bne $3 $7 fail
  1633.  
  1634. #    li $2 0x7f7f
  1635.     addi $2 $0 0x7f7f
  1636.     mtc2 $2 $3
  1637.     addu $0 $0 $0            # Nop
  1638.     mfc2 $4 $3
  1639.     addu $0 $0 $0            # Nop
  1640.     bne $2 $4 fail
  1641. #    li $2 0x7f7f
  1642.     addi $2 $0 0x7f7f
  1643.     mtc3 $2 $3
  1644.     addu $0 $0 $0            # Nop
  1645.     mfc3 $4 $3
  1646.     addu $0 $0 $0            # Nop
  1647.     bne $2 $4 fail
  1648.     addu $0 $0 $0            # Nop
  1649.  
  1650.  
  1651.     .data
  1652. hilo_:    .asciiz "Testing move to/from HI/LO\n"
  1653.     .text
  1654.     addi $v0 $0 4    # syscall 4 (print_str)
  1655. #    la $a0 hilo_
  1656.     lui $a0, 0x1000
  1657.     ori $a0 $a0 0x360
  1658.     syscall
  1659.  
  1660.     mthi $0
  1661.     mfhi $2
  1662.     bne $2 $0 fail
  1663.     mtlo $0
  1664.     mflo $2
  1665.     bne $2 $0 fail
  1666. #    li $2 1
  1667.     addi $2 $0 1
  1668.     mthi $2
  1669.     mfhi $3
  1670.     bne $3 $2 fail
  1671. #    li $2 1
  1672.     addi $2 $0 1
  1673.     mtlo $2
  1674.     mflo $3
  1675.     bne $3 $2 fail
  1676. #    li $2 -1
  1677.     addi $2 $0 -1
  1678.     mthi $2
  1679.     mfhi $3
  1680.     bne $3 $2 fail
  1681. #    li $2 -1
  1682.     addi $2 $0 1
  1683.     mtlo $2
  1684.     mflo $3
  1685.     bne $3 $2 fail
  1686.     addu $0 $0 $0            # Nop
  1687.  
  1688.     .data
  1689. lswc_:    .asciiz "Testing load/store word coprocessor z\n"
  1690.     .align 2
  1691. lswcd_:    .byte 0, 0, 0, 0
  1692.     .text
  1693.     addi $v0 $0 4    # syscall 4 (print_str)
  1694. #    la $a0 lswc_
  1695.     lui $a0, 0x1000
  1696.     ori $a0 $a0 0x37c
  1697.     syscall
  1698.  
  1699. #    li $3, 0x7f7f7f7f
  1700.     lui $3 0x7f7f
  1701.     ori $3 $3 0x7f7f
  1702. #    la $2 lswcd_
  1703.     lui $2, 0x1000
  1704.     ori $2 $2 0x3a4
  1705.     mtc0 $3, $0
  1706.     addu $0 $0 $0           #Nop
  1707.     swc0 $0 0($2)
  1708.     lw $4 0($2)
  1709.     addu $0 $0 $0           #Nop
  1710.     bne $4 $3 fail
  1711.     lwc0 $1 0($2)
  1712.     addu $0 $0 $0           #Nop
  1713.     mfc0 $5, $1
  1714.     addu $0 $0 $0           #Nop
  1715.     bne $5 $3 fail
  1716.     addu $0 $0 $0           #Nop
  1717.  
  1718. #    li $3, 0x7f7f7f7f
  1719. #    lui $3 0x7f7f
  1720. #    ori $3 $3 0x7f7f
  1721. #    la $2 lswcd_
  1722. #    lui $2, 0x1000
  1723. #    ori $2 $2 0x3a4
  1724. #    mtc1 $3, $0
  1725. #    addu $0 $0 $0           #Nop
  1726. #    swc1 $f0 0($2)
  1727. #    lw $4 0($2)
  1728. #    addu $0 $0 $0           #Nop
  1729. #    bne $4 $3 fail
  1730. #    lwc1 $f1 0($2)
  1731. #    addu $0 $0 $0           #Nop
  1732. #    mfc1 $5, $f1
  1733. #    addu $0 $0 $0           #Nop
  1734. #    bne $5 $3 fail
  1735.  
  1736. #    li $3, 0x7f7f7f7f
  1737.     lui $3 0x7f7f
  1738.     ori $3 $3 0x7f7f
  1739. #    la $2 lswcd_
  1740.     lui $2, 0x1000
  1741.     ori $2 $2 0x3a4
  1742.     mtc2 $3, $0
  1743.     addu $0 $0 $0           #Nop
  1744.     swc2 $0 0($2)
  1745.     lw $4 0($2)
  1746.     addu $0 $0 $0           #Nop
  1747.     bne $4 $3 fail
  1748.     lwc2 $1 0($2)
  1749.     addu $0 $0 $0           #Nop
  1750.     mfc2 $5, $1
  1751.     addu $0 $0 $0           #Nop
  1752.     bne $5 $3 fail
  1753.     addu $0 $0 $0           #Nop
  1754.  
  1755. #    li $3, 0x7f7f7f7f
  1756.     lui $3 0x7f7f
  1757.     ori $3 $3 0x7f7f
  1758. #    la $2 lswcd_
  1759.     lui $2, 0x1000
  1760.     ori $2 $2 0x3a4
  1761.     mtc3 $3, $0
  1762.     addu $0 $0 $0           #Nop
  1763.     swc3 $0 0($2)
  1764.     lw $4 0($2)
  1765.     addu $0 $0 $0           #Nop
  1766.     bne $4 $3 fail
  1767.     addu $0 $0 $0           #Nop
  1768.     lwc3 $1 0($2)
  1769.     addu $0 $0 $0           #Nop
  1770.     mfc3 $5, $1
  1771.     addu $0 $0 $0           #Nop
  1772.     bne $5 $3 fail
  1773.     addu $0 $0 $0           #Nop
  1774.  
  1775.  
  1776. # Done !!!
  1777.     .data
  1778. pt:    .asciiz "Passed all tests\n"
  1779.     .text
  1780.     addi $2 $0 4    # syscall 4 (print_str)
  1781. #    la $a0 sm
  1782.     lui $a0, 0x1000
  1783.     ori $a0 $a0 0x3a8
  1784.     syscall
  1785.     lui $4 0x1000
  1786.     lw $31 0($4)
  1787.     addu $0 $0 $0        # Nop
  1788.     jr $31        # Return from main
  1789.  
  1790.  
  1791.  
  1792.  
  1793. #    .data
  1794. #fm:    .asciiz "Failed test\n"
  1795.     .text
  1796. fail:    addi $2 $0 4    # syscall 4 (print_str)
  1797. #    la $a0 fm
  1798.     lui $a0, 0x1000
  1799.     ori $a0 $a0 0x4
  1800.     syscall
  1801.     addi $2 $0 10    # syscall 10 (exit)
  1802.     syscall
  1803.     addu $0 $0 $0        # Nop
  1804.     addu $0 $0 $0        # Nop
  1805.     addu $0 $0 $0        # Nop
  1806.     addu $0 $0 $0        # Nop
  1807.  
  1808.  
  1809.  
  1810.  
  1811.  
  1812. # Define the exception handling code.  This must go first!
  1813. # Duplicate of standard trap handler.
  1814.  
  1815.     .data
  1816.     .globl __m1_
  1817. __m1_:    .asciiz "  Exception "
  1818.     .globl __m2_
  1819. __m2_:    .asciiz " occurred\n"
  1820.     .ktext 0x80000080
  1821.     mfc0 $26 $13    # Cause
  1822.     mfc0 $27 $14    # EPC
  1823.     addiu $v0, $0, 4    # syscall 4 (print_str)
  1824. #    la $a0 __m1_
  1825.     lui $a0, 0x1000
  1826.     ori $a0 $a0 0x03e5
  1827.     syscall
  1828.     addiu $v0, $0, 1    # syscall 1 (print_int)
  1829.     addu $a0 $0 $26
  1830.     syscall
  1831.     addiu $v0, $0, 4    # syscall 4 (print_str)
  1832. #    la $a0 __m2_
  1833.     lui $a0, 0x1000
  1834.     ori $a0, $a0, 0x03f1
  1835.     syscall
  1836.     mtc0 $0, $13        # Clear Cause register
  1837.     rfe            # Return from exception handler
  1838.     addiu $27 $27 4        # Return to next instruction
  1839.     jr $27
  1840.  
  1841.  
  1842.  
  1843.  
  1844.